package com.party.core.service.mall.impl;

import com.google.common.base.Strings;
import com.party.common.paging.Page;
import com.party.core.dao.read.mall.MallGoodsReadDao;
import com.party.core.dao.write.mall.MallGoodsWriteDao;
import com.party.core.model.BaseModel;
import com.party.core.model.mall.*;
import com.party.core.service.mall.IMallGoodsService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商城商品
 * Created by wei.li
 *
 * @date 2017/8/15 0015
 * @time 16:33
 */
@Service
public class MallGoodsService implements IMallGoodsService {

    @Autowired
    private MallGoodsReadDao mallGoodsReadDao;

    @Autowired
    private MallGoodsWriteDao mallGoodsWriteDao;

    /**
     * 插入商城商品
     *
     * @param mallGoods 商品
     * @return 插入结果（true/false）
     */
    @Override
    public String insert(MallGoods mallGoods) {
        BaseModel.preInsert(mallGoods);
        boolean result = mallGoodsWriteDao.insert(mallGoods);
        if (result) {
            return mallGoods.getId();
        }
        return mallGoods.getId();
    }

    /**
     * 更新商城商品
     *
     * @param mallGoods 商城商品
     * @return 更新结果（true/false）
     */
    @Override
    public boolean update(MallGoods mallGoods) {
        mallGoods.setUpdateDate(new Date());
        return mallGoodsWriteDao.update(mallGoods);
    }

    /**
     * 逻辑删除
     *
     * @param id 实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean deleteLogic(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)) {
            return false;
        }
        return mallGoodsWriteDao.deleteLogic(id);
    }

    /**
     * 物理删除
     *
     * @param id 实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean delete(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)) {
            return false;
        }
        return mallGoodsWriteDao.delete(id);
    }

    /**
     * 批量逻辑删除
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDeleteLogic(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return mallGoodsWriteDao.batchDeleteLogic(ids);
    }

    /**
     * 批量物理删除
     *
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDelete(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return mallGoodsWriteDao.batchDelete(ids);
    }

    /**
     * 获取商城商品
     *
     * @param id 主键
     * @return 商城商品
     */
    @Override
    public MallGoods get(String id) {
        return mallGoodsReadDao.get(id);
    }

    /**
     * 分页查询
     *
     * @param mallGoods 商城商品
     * @param page      分页信息
     * @return 商城商品
     */
    @Override
    public List<MallGoods> listPage(MallGoods mallGoods, Page page) {
        return mallGoodsReadDao.listPage(mallGoods, page);
    }

    /**
     * 查询所有
     *
     * @param mallGoods 商城商品
     * @return 列表
     */
    @Override
    public List<MallGoods> list(MallGoods mallGoods) {
        return mallGoodsReadDao.listPage(mallGoods, null);
    }


    /**
     * 根据类型查找商品
     *
     * @param categoryId 类型编号
     * @return 商品列表
     */
    @Override
    public List<MallGoods> findByCategoryId(String categoryId) {
        return mallGoodsReadDao.findByCategoryId(categoryId);
    }

    /**
     * 商品列表
     *
     * @param goods
     * @param params
     * @param page   分页参数
     * @return
     */
    @Override
    public List<MallGoodsWithAuthor> withAuthorListPage(MallGoods goods, Map<String, Object> params, Page page) {
        return mallGoodsReadDao.withAuthorListPage(goods, params, page);
    }


    /**
     * 商品列表（带类型）
     *
     * @param mallGoods 商品
     * @param page                  分页参数
     * @return 列表
     */
    @Override
    public List<MallCategoryWithGoods> withCategoryListPage(MallGoods mallGoods, Page page) {
        return mallGoodsReadDao.withCategoryListPage(mallGoods, page);
    }


    @Override
    public List<MallGoods> batchList(@NotNull Set<String> ids, MallGoods mallGoods, Page page) {
        return null;
    }

    @Override
    public List<MallGoods> search(MallCategorySiftGoodsInput input, Page page) {
        return mallGoodsReadDao.search(input, page);
    }

    /**
     * 获取商品信息(详情)
     * @param id: 商品id
     * @return
     */
    @Override
    public MallGoodsInfo info(String id) {
        return mallGoodsReadDao.info(id);
    }

    @Override
    public void clearStartTime(String id) {
        mallGoodsWriteDao.clearStartTime(id);
    }

    @Override
    public void updateStatus(String id, Integer status) {
        mallGoodsWriteDao.updateStatus(id, status);
    }

    @Override
    public Integer checkCategoryBrand(String brandId, String categoryId) {
        return mallGoodsReadDao.checkCategoryBrand(brandId, categoryId);
    }

    @Override
    public Integer checkCategorySpec(String specId, String categoryId) {
        return mallGoodsReadDao.checkCategorySpec(specId, categoryId);
    }

    @Override
    public void updateStock(String id, Long stock) {
        mallGoodsWriteDao.updateStock(id, stock);
    }

    @Override
    public List<MallGoods> getGoodsList(Set<String> goodsIds, Page page) {
        return mallGoodsReadDao.getGoodsList(goodsIds, page);
    }
}
